package com.libinshen.wxpay.login.controller;

import com.libinshen.wxpay.common.util.wxUtils.WxLoginUtils;
import com.libinshen.wxpay.common.vo.CommonResult;
import com.libinshen.wxpay.login.service.WxLoginService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;


/****
 *社交登录 与 短信登录与 用户名密码登录相关问题：
 *   1：token 生成问题使用oauth2.0 还是 JWT. 两者的区别
 *   2：多种类型的登录方式 如何管理好 token 以及token 中应该保存哪些信息
 *   3：多种类型的登录 表应该如何设计
 *   3：使用Spring Security如何控制权限 并与多种登录融合在一起
 *   登陆的流程应该是怎么样的
 *          1: 前端带着userName  pwd  登录  返回token refreshtoken（典型的Oauth2.0 协议）
 *          2: 每次访问其他接口就带着token,会被统一拦截器 去验证token,
 *              2.1：如果过期就返回token 已经过期，前端重定向到登录页面。
 *              2.2：如果过期返回前端token已过期，前端请求刷新token 接口。带着refrestoken
 *              2.3:如果快过期，就需要去重置他的过期时间。 时间必须放在redis.token 这种用户态字段必须放在redis中
 */

/***
 *第三方登录可以使用 JustAuth 第三方开源工具
 */
@Api(tags = "微信登录接口")
@RestController
@RequestMapping("/wxLogin")
@Slf4j
public class WxLoginController {

    @Autowired
    private WxLoginService WxLoginService;


    @GetMapping("/getCode")
    @ApiOperation("获取微信code")
    public String weiXinLogin(@RequestParam(defaultValue = "123") String state) {
        return WxLoginUtils.getCodeUrl(state);
    }


    @ApiOperation(value = "微信授权登录")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "code",
                    value = "用户换取access_token的code，仅在ErrCode为0时有效", required = true, dataType = "String")
    })
    @GetMapping("/wxLogin")
    public CommonResult wxLogin(@RequestParam String code) {
        return CommonResult.success(WxLoginService.wxLogin(code));
    }
    //以上是微信登录===========================================================//

    //以上是微信公众号登录登录===========================================================//

}
